#pragma once
#include <string>

using namespace std;

typedef unsigned int Type_Code;
const Type_Code BASE = 0; //this will serve the whoamI func

class Meeting
{
public:
	Meeting(void);
	virtual ~Meeting(void);
	Meeting(float start, float end, const string& subject);
	Meeting(const Meeting &meeting);
	const Meeting &operator =(const Meeting &meeting);
	
	// check if two meetings are equal in content
	virtual bool compare(const Meeting & meeting) const;

	// this is an instrument to find the dynamic type at runtime
	virtual Type_Code whoAmI() const;
	
	void setTimeStart(float time);
	void setTimeEnd(float time);
	void setSubject(const string &subject);

	float getTimeStart() const;
	float getTimeEnd() const;
	const string &getSubject() const;

	virtual bool checkColission(const Meeting& meeting) const;

	virtual ostream & toString(ostream & os) const;

private:
	float timeStart;
	float timeEnd;
	string subject;
};
